package ar.edu.untref.robotica.control;

import ar.edu.untref.robotica.simulador.Escenario;
import ar.edu.untref.robotica.simulador.Robot;
import ar.edu.untref.robotica.simulador.Simulador;

public abstract class ModuloDeControl {
	
	private Simulador simulador;
	
	public ModuloDeControl(Simulador simulador){
	
		this.simulador = simulador;
	}
	
	public Simulador getSimulador(){
		return this.simulador;
	}
	
	public void avanzar(){
		simulador.acelerarRobot(1, 1);
	}
	
	public void frenar() {
	
		simulador.acelerarRobot(0, 0);
	}
	
	public void retroceder() {
	
		simulador.acelerarRobot(-1, -1);
	}
	
	public void girarDerecha() {
	
		simulador.acelerarRobot(+1, -1);
	}
	
	public void girarIzquierda() {
		
		simulador.acelerarRobot(-1, +1);
	}
	
	public void acelerarRuedaIzquierda() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda() + 1,
				simulador.getVelocidadFinalDeseadaDerecha());
	}
	
	public void desacelerarRuedaIzquierda() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda() - 1,
				simulador.getVelocidadFinalDeseadaDerecha());
	}
	
	public void acelerarRuedaDerecha() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda(),
				simulador.getVelocidadFinalDeseadaDerecha() + 1);
	}
	
	public void desacelerarRuedaDerecha() {
		
		simulador.acelerarRobot(simulador.getVelocidadFinalDeseadaIzquierda(),
				simulador.getVelocidadFinalDeseadaDerecha() - 1);
	}
	
	public void agrandarPantalla() {
	
		simulador.getGraficador().aumentarZoom();
	}
	
	public void achicarPantalla() {
	
		simulador.getGraficador().disminuirZoom();
	}
	
	public void sensarAdelante(){
	
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculoAdelante(simulador.getEscenario()));
	}
	
	public void sensarAtras(){
		
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculoAtras(simulador.getEscenario()));
	}
	
	public void sensarIzquierda(){
		
		System.out.println("Obstaculo a "
				+ simulador.getRobot().getDistanciaObstaculo45Izquierda(simulador.getEscenario()));
	}
	
	public void sensarDerecha(){
		
		System.out
		.println("Obstaculo a "+ simulador.getRobot().getDistanciaObstaculo45Derecha(simulador.getEscenario()));
	}
	
	protected double[] obtenerInformacionDeTodosLosSensores() {
		
		Robot robot = getSimulador().getRobot();
		Escenario escenario = getSimulador().getEscenario();
		
		double derecha = robot.getDistanciaObstaculo45Derecha(escenario);
		double izquierda = robot.getDistanciaObstaculo45Izquierda(escenario);
		double atras = robot.getDistanciaObstaculoAtras(escenario);
		double adelante = robot.getDistanciaObstaculoAdelante(escenario);
		
		double[] datosSensados = new double [4];
		datosSensados[0] = derecha;
		datosSensados[1] = izquierda;
		datosSensados[2] = atras;
		datosSensados[3] = adelante;
		
		return datosSensados;
	}
}
